package com.example.temp;


import java.util.HashMap;
import java.util.Map;

public class Test25 {

    public static void main(String[] args) {
        Map<String, Object> m = new HashMap();
        m.put("key", "blarg");
        String s = (String) m.get("key");

        System.out.println(s);
    }


    /**
     * 输入一个复杂链表（每个节点中有节点值，以及两个指针，一个指向下一个节点，
     * 另一个特殊指针random指向一个随机节点），请对此链表进行深拷贝，并返回拷贝后的头结点。
     * （注意，输出结果中请不要返回参数中的节点引用，否则判题程序会直接返回空）
     */

    public class Node {
        int val;
        Node next = null;
        Node random = null;

        Node(int val) {
            this.val = val;
        }
    }


    public class Solution {

        public Node Clone(Node pHead) {

            if (pHead == null) return null;

            Node currentNode = pHead;

//            1.复制节点
            while (currentNode != null) {
                Node cloneNode = new Node(currentNode.val);
                Node nextNode = currentNode.next;
                currentNode.next = cloneNode;
                cloneNode.next = nextNode;
                currentNode = nextNode;
            }

            //2.复制random指针

            currentNode = pHead;

            while (currentNode != null) {
                if (currentNode.random != null) {
                    currentNode.next.random = currentNode.random.next;
                }else {
                    currentNode.next.random = null;
                }
                currentNode = currentNode.next.next;
            }

            //拆分链表

            currentNode = pHead;

            Node pCloneNode = currentNode.next;
            while (currentNode != null) {
                Node cloneNode = currentNode.next;
                currentNode.next = cloneNode.next;
                cloneNode.next = currentNode.next==null?null:currentNode.next.next;
                currentNode = currentNode.next;
            }

            return pCloneNode;
        }

    }
}
